<?php


namespace App\Commons\Domain\Module\Exchange\Contract;


use App\Commons\Domain\Module\UserCenter\Model\Member;

interface OrderService
{

    /**
     * 创建广告
     * @param Member $member
     * @param int $coin_id 币种id
     * @param int $type 广告类型：1卖 出，2买入
     * @param float $quantity 数量
     * @param float $price 单价
     * @param array $data 其他数据:['min_limit'=>100, 'max_limit'=>100, 'pay_time_limit'=>5, 'remark','country_id','pay_ids'=>[]];
     * @return mixed
     */
    public function createAd(Member $member, int $coin_id, int $type, float $quantity, float $price, array $data);

    /**
     * 修改更新广告：为保持数据一致性有处于交易中订单的广告不能修改
     * @param Member $member
     * @param int $ad_id
     * @param array $data
     * @return
     */
    public function updateAd(Member $member, int $ad_id, array $data);

    /**
     * 上架、下架和关闭广告：
     * 关闭的广告不能再修改状态，只能重新创建新的广告
     * 上架和下架仅单纯的改变状态，关闭卖币广告释放冻结资金，
     * @param int $ad_id
     * @param int $status
     * @return mixed
     */
    public function upDown(int $ad_id, int $status);

    /**
     * 创建订单
     * @param string $uid
     * @param int $ad_id 广告id
     * @param float $quantity 数量
     * @return mixed
     */
    public function createOrder(string $uid, int $ad_id, float $quantity);

    /**
     * 买方付款
     * @param string $order_no
     * @param int $payment_id
     * @return bool
     */
    public function payOrder(string $order_no, int $payment_id);

    /**
     * 卖方放币，至此订单完成，卖方钱包对应的冻结金额减少
     * @param string $uid
     * @param string $order_no
     * @return void
     */
    public function confirmOrder(string $uid, string $order_no);

    /**
     * 取消订单
     * TODO:只有买方在未付款前或收到退款后能取消订单
     * @param string $order_no
     * @return mixed
     */
    public function cancelOrder(string $order_no);

}
